package com.magenta.maxoptra.gis;

/**
 * User: KuznetsovD
 * Date: 26.10.11
 * Time: 18:10
 */
public enum GisParameter {

    use_map_provider("Use map provider","<use_map_provider>"),

    /**
     * Для некоторых провайдеров map-key не нужен. В этом случае на UI при валидации данных нужно знать,
     * что отсутствие mapKey не является ошибкой. Для этого вводится данный флаг.
     */
    use_map_key("Use map key", "<use_map_key-label>"),

    map_key("Map key", "<map_key-label>"),

    searchFieldAddressFormatHint("Search field address format", "<searchFieldAddressFormatHint>"),

    /**
     * Определяет, будет ли в компоненте geocombobox для определения адреса
     * использоваться кастомная форма адреса, специфичная для map-провайдера
     */
    use_custom_geo_address_form("Use custom geo address form", "<use_custom_geo_address_form-label>"),

    /**
     * Поддержка возможности расчета нескольких маршрутов за раз
     */
    enableBatchRouteRequests("Enable batch route requests", "<enable_batch_route_requests-label>"),

    map_id("Map Id", "<map_id-label>"),
    locale("Response locale", "<gis-locale>"),
    client_name("Client Name", "<client_name-label>"),
    geocoding_key("Geocoding Key", "<geocoding_key-label>"),
    region("Region", "<region-label>"),
    base_url("Base geoservice URL", "<base_url-label>"),
    reverse_geocoding_url("Reverse geocoding service URL", "<reverse_geocoding_url-label>"),
    domain("Client domain", "<domain-label>"),
    geocoding_accuracy("Geocoding Accuracy", "<geocoding_accuracy-label>"),
    provider_type("Provider Type", "<provider_type-label>"),
    accountName("Account Name", "<account-name>"),
    layers("Layers", "<layers-label>"),
    format("Format", "<format-label>"),
    projection("Projection", "<projection-label>"),
    wsdl_location("Wsdl location", "<geobase_wsdl_location-label>"),
    server_ip("Server Ip", "<geobase_server_ip-label>"),
    use_shortest_route("Use shortest route", "<use_shortest_route-label>"),
    enableLogging("Enable logging", "<enable_logging-label>"),
    routing_url("Routing service URL", "<routing_url-label>"),
    routing_path_url("Routing path service URL", "<routing_path_url-label>"),
    routing_matrix_url("Routing Matrix service URL", "<routing_matrix_url-label>"),
    point_locator_url("Nearest point locator service URL", "<point_locator_url-label>"),
    geocoding_url("Geocoding service URL", "<geocoding_url-label>"),
    enableCache("Enable using cache", "<enable_cache-label>"),
    disablePersistenceCache("Disable persistence cache", "<disable_persistence_cache-label>"),
    cacheStorageTime("Storage time time in cache", "<cache-storage-time-label>"),
    useMultiplePointsRouting("Use multiple points routing", "<use-multiple-points-routing>"),
    correctionFactor("Correction Factor", "<correction-factor>"),
    routing_profile("Routing profile", "<routing_profile-label>"),
    default_vehicle_type("Default vehicle type", "<default_vehicle_type-label>"),
    restricted_roads("Restricted roads", "<restricted_roads-label>"),
    use_toll_roads("Use toll roads", "<use_toll_roads-label>"),
    custom_map_config("Custom map config", "<custom_map_config-label>"),

    /**
    * время ожидания ответа от провайдера при расчете одного маршрута в секундах
    */
    timeout_on_request_for_single_route("Timeout on request for single route", "<timeout_on_request_for_single_route-label>"),
    /**
     * время ожидания ответа от провайдера при расчете нескольких маршрутов в секундах
     */
    timeout_on_request_for_some_routes("Timeout on request for some routes", "<timeout_on_request_for_some_routes-label>"),

    /**
     * размер пакета для расчета дистанции перед планированием
     */
    routes_batch_size_for_distance_calculation("Routes batch size for distance calculation", "<routes_batch_size_for_distance_calculation-label>"),

    /**
     * Количество попыток расчета дистанции нескольких маршрутов перед планированием
     */
    attempts_count_for_batch_distance_calculation("Attempts count for distance calculation batch routes before scheduling", "<attempts_count_for_batch_distance_calculation-label>"),

    /**
     * Количество попыток расчета дистанции одного маршрута перед планированием
     */
    attempts_count_for_single_distance_calculation("Attempts count for distance calculation single route before scheduling", "<attempts_count_for_single_distance_calculation-label>"),

    /**
     * использовать единичные попытки получения маршрута при расчете дистанции перед планированием
     */
    enable_single_attempts_for_distance_calculation("Enable single attempts for distance calculation", "<enable_single_attempts_for_distance_calculation-label>"),

    persisted_cache_message_size("Size of message for sending to persisted cache", "<persisted_cache_message_size-label>"),
    traffic("traffic", "<traffic-label>");

    String description;

    String label;

    public String getDescription() {
        return description;
    }

    public String getLabel() {
        return label;
    }

    GisParameter(String description, String label) {
        this.description = description;
        this.label = label;
    }

    public String withProvider(String provider) {
        return provider+"."+name();
    }
}
